/**
 * cron 表达式解析
 */
export = class{

    /** 根据表达式获取下一次执行的时间 */
    static nextTime(cron:string){
        // 根据cron生成一个时间戳
        let arr:any = cron.split(" ").filter(e=>e).map(e=>e=="*"?"*":Number(e));
        
        // 根据当前的时间去获取下一次执行的时间戳(new Date()).getTime()
        let date = new Date();
        let time = date.getTime();
        // 获取每分钟第多少秒进行执行 1
        if(arr[0] != "*"){
            date.setSeconds(arr[0])
        }

        if(arr[1] != "*"){
            date.setMinutes(arr[1])
        }

        if(arr[2] != "*"){
            date.setHours(arr[2])
        }
        
        if(arr[3] != "*"){
            date.setDate(arr[3])
        }
        
        if(arr[4] != "*"){
            date.setMonth(arr[4])
        }

        if(arr[5] != "*"){
            date.setFullYear(arr[5]);
        }

        let jetLag = date.getTime()-time;

        if(jetLag > 0) return jetLag;

        if(arr[5] == "*" && arr[4] != "*"){
            date.setFullYear(date.getFullYear()+1);
        }else if(arr[4] == "*" && arr[3] != "*"){
            date.setMonth(date.getMonth()+1);
        }else if(arr[3] == "*" && arr[2] != "*"){
            date.setDate(date.getDate()+1);
        }else if(arr[2] == "*" && arr[1] != "*"){
            date.setHours(date.getHours()+1);
        }else if(arr[1] == "*" && arr[0] != "*"){
            date.setMinutes(date.getMinutes()+1);
        }else if(arr[0] == "*"){
            date.setSeconds(date.getSeconds()+1);
        }
        // 时差小于60秒 加分钟
        return date.getTime()-time;
    }
}